package com.tanhua.server.controller;

import com.tanhua.domain.db.User;
import com.tanhua.domain.db.UserInfo;
import com.tanhua.server.interceptors.UserHolder;
import com.tanhua.server.service.UserService;
import com.tanhua.vo.CountsVo;
import com.tanhua.vo.PageResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.Map;

@RestController
@RequestMapping("/users")
public class UserInfoController {


    @Autowired
    private UserService userService;

    //    1、请求方式  get
//    2、请求路径 /users
//    3、请求参数 头 两个query参数   userID   huanxinID
//    4、返回数据  UserInfoVo
    @GetMapping(name = "查询执行用户的资料")
    public ResponseEntity queryUserInfo(@RequestHeader("Authorization") String token, Long userID, Long huanxinID) {
//   优先级     huanxinID-->userID-->token
        Long id = null;
        if (huanxinID != null) {
            id = huanxinID;
        } else {
            if (userID != null) {
                id = userID;
            } else {
                id = userService.getUserByToken(token).getId();
            }
        }
        return userService.findUserInfoById(id);
    }


    //    1、请求方式  put
//    2、请求路径 /users
//    3、请求参数 头  body  UserInfo
//    4、返回数据 无
    @PutMapping(name = "更新用户的资料")
    public ResponseEntity updateUserInfo(@RequestBody UserInfo userInfo) {
        return userService.updateUserInfo(userInfo);
    }


    //    1、请求方式  POST
//    2、请求路径 /users/header
//    3、请求参数 头  图片
//    4、返回数据 无
    @PostMapping(value = "/header", name = "更新用户的头像")
    public ResponseEntity updateUserHeader(@RequestHeader("Authorization") String token, MultipartFile headPhoto) throws Exception {
//        1、update tb_user_info set avatar=? where id=?
        return userService.loginReginfoHead(token, headPhoto);
    }

    //发送验证码
    //  /users/phone/sendVerificationCode
    @PostMapping(value = "phone/sendVerificationCode",name = "修改手机号- 1.发送短信验证码")
    public ResponseEntity<Object> sendVerificationCode() throws Exception {
        User user = UserHolder.getUser();
        String phone = user.getMobile();
        return userService.sendCode(phone);
    }

    //校验验证码
    //  /users/phone/checkVerificationCode
    @PostMapping(value = "phone/checkVerificationCode",name = "修改手机号 - 2.校验验证码")
    public ResponseEntity<Map<String, Object>> checkVerificationCode(@RequestBody Map<String, String> param) {
        String code = param.get("verificationCode");
        return userService.checkCode(UserHolder.getUser().getMobile(),code);
    }

    //保存新的手机号
    //  /users/phone
    @PostMapping(value = "phone",name = "修改手机号 - 3.保存")
    public ResponseEntity<Void> saveNewMobile(@RequestBody Map<String, String> param){
        String mobile = param.get("phone");
        return userService.saveNewMobile(mobile);
    }


    /**
     * 显示互相喜欢、喜欢、粉丝数量
     * <p>
     * 请求方式  GET
     * 请求路径 users/counts
     * 请求参数 头
     * 返回数据 eachLoveCount互相喜欢 loveCount喜欢  fanCount关注
     *
     * @return countsVo实体类
     */
    @GetMapping("/counts")
    public ResponseEntity<CountsVo> queryCounts() {
        try {
            CountsVo countsVo = this.userService.queryCounts();
            if (null != countsVo) {
                return ResponseEntity.ok(countsVo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
    }


    /**
     * 点击 互相喜欢、喜欢、粉丝以及谁看过我要显示具体的人
     * <p>
     * 请求方式  GET
     * 请求路径 /users/friends/:type
     *
     * @param type     1.互相关注 2.我关注 3.粉丝
     * @param page     页码
     * @param pagesize 分页大小
     * @return PageResult
     * 柴
     */
    @GetMapping("/friends/{type}")
    public ResponseEntity queryFriends(@PathVariable("type") String type, @RequestParam(defaultValue = "1") Integer page,
                                       @RequestParam(defaultValue = "10") Integer pagesize) {

        PageResult pageResult = userService.queryFriends(type, page, pagesize);
        return ResponseEntity.ok(pageResult);
    }


    /**
     * 取消喜欢
     * <p>
     * 请求方式  DELETE
     * 请求路径 /users/like/:uid
     *
     * @param deleteId 要删除的用户id
     * @return 无
     * 柴
     */
    @DeleteMapping("/like/{uid}")
    public ResponseEntity deleteLike(@PathVariable("uid") Long deleteId) {
        return userService.deleteLike(deleteId);

    }


    /**
     * 添加喜欢
     * <p>
     * 请求方式  POST
     * 请求路径 /users/fans/:uid
     *
     * @param likeId 添加喜欢用户的id
     * @return 无
     * 柴
     */
    @PostMapping("/fans/{uid}")
    public ResponseEntity fans(@PathVariable("uid") Long likeId) {
        return userService.fans(likeId);

    }
}
